#include "stm32f10x.h"                  // Device header
#include "Delay.h"

#include "LED.h"
#include "Key.h"
#include "OLED.h"

int main(void)
{
	// 初始化
	OLED_Init();
	Key_Init();

	OLED_ShowString(1, 1, "IWDG TEST");
	
	// 使用RCC查询复位标志函数, 用于区分是普通上电复位还是独立看门狗触发的复位
	if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)
	{
		OLED_ShowString(2, 1, "IWDG RST");
		Delay_ms(500);
		OLED_ShowString(2, 1, "        ");
		Delay_ms(500);
		
		RCC_ClearFlag();
	}
	else
	{
		OLED_ShowString(3, 1, "OTHER RST");
		Delay_ms(500);
		OLED_ShowString(3, 1, "         ");
		Delay_ms(500);
	}
	
	// 初始化独立看门狗
	// 第一步: 键寄存器写入 0x5555 解除写保护
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	// 第二步: 配置预分频 + 重装值
	// 1. 首先明确超时时间: 1000ms
	// 2. 再合理安排预分频 和 重装值 : 1000ms = 1 / 40KHz X 预分频:16   X  重装值: 2499 + 1 
	IWDG_SetPrescaler(IWDG_Prescaler_16);
	IWDG_SetReload(2499);
	
	// 第三步: 键寄存器写入 0xCCCC 之前先喂一次狗, 且写入 0x5555 之外的值, 自动写保护了
  IWDG_ReloadCounter();
	IWDG_Enable();
	
	while(1)
	{
		// 按下阻塞循环, 防止喂狗
		Key_GetNum();
		
		IWDG_ReloadCounter();
		OLED_ShowString(4, 1, "FEED");
		Delay_ms(200);
		OLED_ShowString(4, 1, "    ");
		Delay_ms(600);
	}
}